package com.tool.app.utils;

import java.util.List;
import java.util.Map;

/**
 * 强制转换工具类（仅用于消除IDEA警告）
 * 注意：非安全转换方法意味着你100%确定类型转换是安全的
 */
public final class CastUtil {
    private CastUtil() {
        throw new AssertionError("No CastUtil instances for you!");
    }

    // ========== 基础强制转换（无类型参数）==========

    /**
     * 万能强制转换
     * IDEA提示用法：CastUtil.<目标类型>cast(obj)
     */
    @SuppressWarnings("unchecked")
    public static <T> T cast(Object obj) {
        return (T) obj;
    }

    /**
     * List强制转换
     * IDEA提示用法：CastUtil.<元素类型>castList(obj)
     */
    @SuppressWarnings("unchecked")
    public static <T> List<T> castList(Object obj) {
        return (List<T>) obj;
    }

    /**
     * Map强制转换
     * IDEA提示用法：CastUtil.<键类型, 值类型>castMap(obj)
     */
    @SuppressWarnings("unchecked")
    public static <K, V> Map<K, V> castMap(Object obj) {
        return (Map<K, V>) obj;
    }

    // ========== 带类型参数的转换（更规范）==========

    /**
     * 安全类型转换（带Class参数）
     * @param clazz 目标类型Class对象
     */
    public static <T> T cast(Object obj, Class<T> clazz) {
        return clazz.cast(obj);
    }

    /**
     * List转换（带元素类型Class）
     * @param elementType List元素类型Class对象
     */
    @SuppressWarnings("unchecked")
    public static <T> List<T> castList(Object obj, Class<T> elementType) {
        return (List<T>) obj;
    }

    /**
     * Map转换（带键值类型Class）
     * @param keyType Map键类型Class对象
     * @param valueType Map值类型Class对象
     */
    @SuppressWarnings("unchecked")
    public static <K, V> Map<K, V> castMap(Object obj, Class<K> keyType, Class<V> valueType) {
        return (Map<K, V>) obj;
    }
}